package com.pai4j.domain.community.vo.request.resource;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Assert;


/**
 *
 *
 * @author: CYM-pai
 * @date: 2025/10/31 11:46
 **/
@Data
public class ResourceSaveOrUpdateVO {
    /***
     * 资源业务ID
     */
    private String resourceId;

    /***
     * 资源名
     */
    private String resourceName;

    /***
     * 资源分类
     */
    private String path;

    /***
     * 原始文件名
     */
    private String fileName;

    /***
     * 资源类型
     */
    private String format;

    /***
     * 资源扩展名
     */
    private String extName;

    /***
     * 作者
     */
    private String author;

    /***
     * 封面图
     */
    private String coverImage;

    /***
     * 概述
     */
    private String description;

    /***
     * 正文描述
     */
    private String content;

    /***
     * 资源OSS URL
     */
    private String resourceUrl;

    /***
     * 云资源下载地址
     */
    private String cloudUrl;

    /***
     * 云资源下载码
     */
    private String cloudCode;

    /***
     * 资源大小
     */
    private Integer size;

    /***
     * 是否官方资源
     */
    private Boolean isOfficial;

    /***
     * 下载付费方式
     */
    private Integer payType;

    /***
     * 猿气值\金额
     */
    private Integer payAmount;

    /**
     * 技术社区栏目id
     */
    private Long ccId;

    /***
     * 参数校验
     */
    public void validate() {
        ResourcePayTypeEnum.validPayType(this.payType);
        ResourceFormatEnum.validPathExcludeExtName(this.path, this.extName);
        Assert.isTrue(StringUtils.isNotBlank(this.resourceName) && this.resourceName.length() < 100, "资源名称不能为空，且长度应小于100字");
        Assert.isTrue(StringUtils.isNotBlank(this.path), "分类为空");
        Assert.isTrue(StringUtils.isNotBlank(this.author), "发布人信息为空");
        Assert.isTrue(StringUtils.isNotBlank(this.resourceUrl) || StringUtils.isNotBlank(this.cloudUrl), "资源为空");
        if (ResourcePayTypeEnum.isCoin(this.getPayType()) || ResourcePayTypeEnum.isMoney(this.getPayType())) {
            Assert.isTrue(this.getPayAmount() > 0, "下载元气值获取金额应该大于0");
        }
    }

    /***
     * 初始化资源文件的一些信息
     */
    public void initResourceFileInfo() {
        if (StringUtils.isNotBlank(this.fileName)) {
            String extName = ResourceFormatEnum.getFileExtNameByFileName(this.fileName);
            this.setExtName(extName);
            this.setFormat(ResourceFormatEnum.getResourceFormatByExtName(extName));
        }
    }
}
